package com.boost.tjvm.oom;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

public class JavaMethodAreaOOM {


 /*
 jdk6
 * -XX:PermSize=10M -XX:MaxPermSize=10M


 jdk 8
 -XX:MetaspaceSize=10m -XX:MaxMetaspaceSize=10m
       　-XX:MetaspaceSize，初始空间大小，达到该值就会触发垃圾收集进行类型卸载，同时GC会对该值进行调整：如果释放了大量的空间，就适当降低该值；如果释放了很少的空间，那么在不超过MaxMetaspaceSize时，适当提高该值。
        -XX:MaxMetaspaceSize，最大空间，默认是没有限制的。
 */
    public static void main(String [] args){
        while (true){
            Enhancer enhancer=new Enhancer();
            enhancer.setSuperclass(HeapOOM.OOMObject.class);
            enhancer.setUseCache(false);
            enhancer.setCallback(new MethodInterceptor() {
                @Override
                public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
                    return proxy.invoke(obj,args);
                }
            });
        }
    }
}
